Generally, current approaches to booting an application use one of two general techniques. The first technique executes an application in place from a non-volatile, low latency memory, e.g. NOR memory. This technique has several disadvantages. Particularly, non-volatile, low latency memory is very expensive; even for simple applications, the amount of memory needed to store the entire application is costly. Attempts to reduce an application's footprint in memory, e.g. compression, adds computational complexity that affects performance by increasing execution time.
The second technique loads a memory from a non-volatile memory with a higher latency. This technique has its own disadvantages. Because of the higher latency, it is either not possible or undesirable to execute an application in place. Thus, the application needs to be loaded into another memory, typically a volatile memory, e.g. RAM, from which it is executed. The loading time affects performance by also increasing execution time.